package pe.gob.mimp.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import pe.gob.mimp.model.Usuario;
import pe.gob.mimp.service.UsuarioService;
import pe.gob.mimp.util.Encriptacion;

@Controller
@RequestMapping(value = "/login")
public class LoginController {
	@Autowired
	private UsuarioService usuarioService;

	@RequestMapping(method = RequestMethod.GET)
	public String showCasoForm(Model model, HttpServletRequest request) {
		Usuario usuario = new Usuario();
		HttpSession session = request.getSession();

		if (session.getAttribute("login") != null) {
			return "redirect:casosocialbusqueda";
		}
		model.addAttribute("login", usuario);
		return "login";
	}

	@SuppressWarnings("static-access")
	@RequestMapping(method = RequestMethod.POST)
	public String grabaFormulario(Model model, Usuario usuario,
			HttpServletRequest request) {
		Usuario usuarioLocal;
		Encriptacion encriptacion = new Encriptacion();
		String clave;
		HttpSession session = request.getSession();

		clave = encriptacion.encriptaEnMD5(usuario.getMd5clave());
		System.out.println(clave);
		usuarioLocal = usuarioService.getUsuarioPorUserName(usuario.getLogin());
		if (usuarioLocal == null) {
			System.out.println("no hay usuario");
			usuario.setMensajeError("No existe el usuario ingresado.");
			usuario.setLogin("");
			usuario.setMd5clave("");
			model.addAttribute("login", usuario);
			return "login";
		} else {
			System.out.println("Intentos fallidos "
					+ usuarioLocal.getIntentosFallidos());
			if (usuarioLocal.getIntentosFallidos() > 2) {
				usuario.setMensajeError("Usted ha superado el límite de intentos. Comuníquese con el administrador de Sistemas para reestablecer su contraseña.");
				usuario.setLogin("");
				usuario.setMd5clave("");
				model.addAttribute("login", usuario);
				return "login";

			} else {
				if (clave.equals(usuarioLocal.getMd5clave())) {
					System.out.println("Clave ok ");
					session.setAttribute("login", usuario.getLogin());
					usuarioLocal.setIntentosFallidos(0L);
					usuarioService.saveUsuario(usuarioLocal);
					return "redirect:casosocialbusqueda";
				} else {
					usuarioLocal.setIntentosFallidos(usuarioLocal
							.getIntentosFallidos() + 1);
                                        if (usuarioLocal.getIntentosFallidos() > 2){
                                            usuarioLocal.setEstado(2L);
                                        }
					usuarioService.saveUsuario(usuarioLocal);
                                            
					usuario.setMensajeError("Clave incorrecta. Le quedan "
							+ (3 - usuarioLocal.getIntentosFallidos())
							+ " intentos.");
					usuario.setMd5clave("");
					model.addAttribute("login", usuario);
					return "login";
				}
			}
		}
	}
}
